import FileSaver from 'file-saver'
import XLSX from 'xlsx'
export default{
    // 导出方法一：根据页面节点直接导出表格，可导出有合并单元表格
    // 缺点：只能导出页面中已经渲染好的数据，表格有分页时不适用
    exportFn(idName,reportName){
        var xlsxParam = { raw: true }   //这个保证表格只进行解析 不做运算
        let fix = document.querySelector('.el-table__fixed');
        let wb;
        if (fix) {
        wb = XLSX.utils.table_to_book(document.querySelector(`${idName}`).removeChild(fix),xlsxParam);
        document.querySelector(`${idName}`).appendChild(fix);
        } else {
        wb = XLSX.utils.table_to_book(document.querySelector(`${idName}`),xlsxParam);
        }
        // / get binary string as output 
        let wbout = XLSX.write(wb, {
        bookType: 'xlsx',
        bookSST: true,
        type: 'array'
        });

        try {
        FileSaver.saveAs(new Blob([wbout], {
          type: 'application/octet-stream'
        }), `${reportName}.xlsx`);
        } catch (e) {
          if (typeof console !== 'undefined') console.log(e, wbout)
        }
        return wbout;
    },
    // 导出方法二：数据为单条数据，前端对表格进行操作后 不能实现原样导出，优点数据量大时，请求接口返回数据可直接进行导出。
    /*
     * 导出excel
     * @param { Array } params.excelHeader 导出excel的表头 例：['类型', '合同号', '账户名', '币种', '金额']
     * @param { Array } params.excelFilterVal 导出数据所需的字段(multipleSelection或defaultList对象的属性) 例：['type', 'contractCode', 'accountName', 'currency', 'amount']
     * @param { Array } params.multipleSelection 导出勾选的单笔或多笔数据
     * @param { Array } params.defaultList 默认导出列表所有数据
     * @param { Array } params.fileName 导出excel的文件名
     */
    exportExcel(params) {
      let excelHeader = params.excelHeader
      let excelFilterVal = params.excelFilterVal
      require.ensure([], () => {
        let {
          export_json_to_excel
        } = require('@/components/Excel/Export2Excel'); //默认为导出全部列表，也可以单笔导出或勾选多笔批量导出
        let listArr = params.multipleSelection.length > 0 ? JSON.parse(JSON.stringify(params.multipleSelection)) :JSON.parse(JSON.stringify(params.defaultList));
        console.log("勾选数据",listArr)
        let formatData = formatJson(excelFilterVal, listArr);
  
        function formatJson(excelFilterVal, listArr) {
          return listArr.map(v => {
            return excelFilterVal.map(j => v[j]);
          })
        }
        export_json_to_excel(excelHeader, formatData, params.fileName);
      })
    },
}